package lesson04;

import java.sql.*;

public class testJDBC {
    public static void main(String[] args) {
        // 定义数据库连接信息
        String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull";
        String username = "root";
        String password = "123456";

        Connection connection = null;

        try {
            // 加载 JDBC 驱动程序
            /* 这一步就是创建DriverManager.registerDriver(new Driver()); 这段代码就是这个类的静态代码块，我们直接加载该类就可以了。
               示例中使用的（com.mysql.jdbc.Driver）是旧版的 MySQL JDBC 驱动程序。从 MySQL 8.0 版本开始，推荐使用新的驱动程序类 com.mysql.cj.jdbc.Driver
               新版的 MySQL 驱动程序通过 SPI（Service Provider Interface）自动注册，不再需要手动加载驱动程序类。
               这意味着在建立数据库连接时，不再需要调用 Class.forName("com.mysql.cj.jdbc.Driver") */
            Class.forName("com.mysql.jdbc.Driver");

            // 建立数据库连接
            connection = DriverManager.getConnection(url, username, password);

            // 关闭数据库自动提交，自动会开启事务
            connection.setAutoCommit(false); // 开启事务

            String sql = "UPDATE test_table set test1 = '1k' where IS_REPAY_LENDING = '1'";
            PreparedStatement statement = connection.prepareStatement(sql);
            statement.executeUpdate();

            int a = 1/0;

            sql = "UPDATE test_table set test1 = '662' where IS_REPAY_LENDING = '2'";
            PreparedStatement statement1 = connection.prepareStatement(sql);
            statement1.executeUpdate();

            // 提交事务
            connection.commit();

            // 关闭连接
            statement.close();
            statement1.close();
            connection.close();
        } catch (ClassNotFoundException | SQLException e) {
            // 如果失败则默认回滚
//            try {
//                connection.rollback(); //如果失败则回滚事务
//            } catch (SQLException throwables) {
//                throwables.printStackTrace();
//            }
            e.printStackTrace();
        }finally {
            try {
                connection.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }
}
